﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.DirectoryServices;
using MJM.RPP.EntidadesNegocio;
using MJM.SPP.EntidadesNegocio;
using MJM.SCA.EntidadesNegocio;
using MJM.Principal;

namespace wRegPadron.frmOpciones
{
    public partial class ucRegAgendaGeneral : System.Web.UI.UserControl
    {
        protected static int IdArea=0;
        protected static int IdDependencia=0;
        protected static int IdResponsable=0;
        protected static List<PersonaTramiteEN> lstPersonaTramiteEN = new List<PersonaTramiteEN>();
        protected static List<ResponsableAgendaEN> lstResponsables = new List<ResponsableAgendaEN>();     
        protected static String DependenciaSelect="";
        public static String usuario;

        private void InsertarLog(String prm2, String prm3)
        {
            string ipusuario = System.Web.HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
            if (ipusuario == null)
                ipusuario = "";

            LogTramiteEN objLogTramiteEN = new LogTramiteEN();
            string mes, dia;
            if (DateTime.Now.Month < 10)
                mes = "0" + DateTime.Now.Month.ToString();
            else mes = DateTime.Now.Month.ToString();

            if (DateTime.Now.Day < 10)
                dia = "0" + DateTime.Now.Day.ToString();
            else dia = DateTime.Now.Day.ToString();
            objLogTramiteEN.LOGAW_chFECMOD = DateTime.Now.Year.ToString() + mes + dia;
            objLogTramiteEN.LOGAW_chFECREG = DateTime.Now.ToShortDateString();
            objLogTramiteEN.LOGAW_chHORREG = DateTime.Now.ToShortTimeString();
            objLogTramiteEN.LOGAW_chIPCLIEN = ipusuario;
            objLogTramiteEN.LOGAW_chPARDOS = prm2;
            objLogTramiteEN.LOGAW_chPARUNO = usuario;
            objLogTramiteEN.LOGAW_chPARTRE = prm3;
            objLogTramiteEN.LOGAW_inHORMOD = DateTime.Now.Hour;
            objLogTramiteEN.LOGAW_chNOMAPL = "Padrón";
            MediadorCN.GetLogTramite().Insertar(objLogTramiteEN);
        }

        public void SetAreaPersona(int id)
        {
            IdArea = id;
        }

        protected bool EncontroResponsable(int idPersona)
        {
            for (int i = 0; i < lstResponsables.Count; i++)
            {
                if (lstResponsables[i].PAD_P_chIDPER == idPersona)
                    return true;
            }
            return false;
        }

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                SubOpcionEN objSubOpcionEN = MediadorCN.GetSubOpcion().ObtenerTexto("MenuRegAgendaGeneral");
                lblTitulo.Text = objSubOpcionEN.SUBOPT_chNOMSOP;
                lblDescripcion.Text = objSubOpcionEN.SUBOPT_chDESSOP;
                //lstPersonaTramiteEN = objPersonaTramiteCN.Listar("", "", IdArea);
                PersonaTramiteEN objpersona = new PersonaTramiteEN();
                usuario = Session["usuario"].ToString();
                /*
                objpersona.NombrePersona = "";
                objpersona.Usuario = "0";
                lstPersonaTramiteEN.Insert(0, objpersona);
                ddlResponsable.DataSource = lstPersonaTramiteEN;
                ddlResponsable.DataTextField = "NombrePersona";
                ddlResponsable.DataValueField = "IDPersona";
                ddlResponsable.DataBind();
                /*
                gvDependencias.DataSource = objAgendaMunicipalCN.ListarDependencia(IdArea);
                gvDependencias.DataBind();*/

                
                pPanelResponsables.Visible = false;
                ddlArea.DataSource = MediadorCN.GetArea().Lista();
                ddlArea.DataValueField="Codigo";
                ddlArea.DataTextField = "Area";
                ddlArea.DataBind();
                ddlArea.Width = 250;
                pPanelConfirmacion.Visible = false;
                pPanelRegistro.Visible = false;
                btnEditar.Visible = false;
                btnAceptar.Visible = true;
            }
        }

        protected void gvDependencias_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            lblErrorDependencia.Text = "";
            lblErrorRegistro.Text = "";
            int index = -1;
            index = Convert.ToInt32(e.CommandArgument);
            GridViewRow row = gvDependencias.Rows[index];
            IdDependencia = Convert.ToInt32(Server.HtmlDecode(row.Cells[0].Text));
            if (e.CommandName == "Seleccionar")
            {
                btnActualizar.Visible = false;
                btnGuardar.Visible = true;
                //pPanelResponsable.Visible = true;
                txtAnexo.Text = "";
                txtDirecto.Text = "";
                txtRPC.Text = "";
                lstResponsables = MediadorCN.GetResponsableAgenda().ListarDependencia(IdDependencia);                
                DependenciaSelect = Server.HtmlDecode(row.Cells[1].Text).ToString();
                InsertarLog("Selección de dependencia", DependenciaSelect);
                if (lstResponsables.Count > 0)
                {                   
                    lblSeleccion.Text = "Responsables de la dependencia " + DependenciaSelect+": ";
                    
                }
                else
                {
                    lblSeleccion.Text = "No se han registrado reponsables en la dependencia " + DependenciaSelect;
                }
                gvResponsables.DataSource = lstResponsables;
                gvResponsables.DataBind();
                ddlResponsable.DataTextField = "NombrePersona";
                /*
                List<PersonaTramiteEN> lst = MediadorCN.GetPersonaTramite().Listar("", "", Convert.ToInt32(ddlArea.SelectedValue));
                ddlResponsable.DataSource = lst;
                ddlResponsable.DataValueField = "IDPersona";
                ddlResponsable.DataBind();*/

                txtDependencia.Text = "";
                txtDireccion.Text = "";
                pPanelResponsable.Visible = false;
                pPanelResponsables.Visible = true;
                btnAceptar.Visible = true;
                btnEditar.Visible = false;                
            }
            else if (e.CommandName == "Editar")
            {
                AgendaMunicipalEN selected = MediadorCN.GetAgendaMunicipal().Obtener(IdDependencia);
                ddlArea.SelectedValue=selected.OFIC_P_inCODOFI.ToString();
                txtDireccion.Text=selected.DEPARE_chDIRDEP;
                txtDependencia.Text = selected.DEPARE_chNOMDEP;
                txtArea.Text = ddlArea.SelectedItem.Text;
                txtOrdenDependencia.Text = selected.DEPARE_inORDDEP.ToString();
                IdArea = selected.OFIC_P_inCODOFI;

                lblErrorDependencia.Text = "";
                lblErrorRegistro.Text = "";
                pPanelResponsables.Visible = false;
                btnEditar.Visible = true;
                btnAceptar.Visible = false;
            }
            else if (e.CommandName == "Eliminar")
            {
                pPanelConfirmacion.Visible = true;
                pPanelResponsables.Visible = false;
                lblDependencia.Text = Server.HtmlDecode(row.Cells[1].Text).ToString();
                btnEditar.Visible = false;
                txtDependencia.Text = "";
                txtDireccion.Text = "";
                btnAceptar.Visible = true;
            }

        }

        protected void btnAceptar_Click(object sender, EventArgs e)
        {
            pPanelConfirmacion.Visible = false;
            AgendaMunicipalEN objAgendaMunicipalEN = new AgendaMunicipalEN();
            objAgendaMunicipalEN.DEPARE_chNOMDEP = txtDependencia.Text;
            objAgendaMunicipalEN.OFIC_P_inCODOFI = IdArea;
            objAgendaMunicipalEN.DEPARE_chDIRDEP = txtDireccion.Text;
            try
            {
                objAgendaMunicipalEN.DEPARE_inORDDEP = Convert.ToInt32(txtOrdenDependencia.Text);
            }
            catch
            {
                objAgendaMunicipalEN.DEPARE_inORDDEP = 0;
            }

            int value=MediadorCN.GetAgendaMunicipal().Insertar(objAgendaMunicipalEN);

            if (value > 0)
            {
                InsertarLog("Insertar dependencia " + txtDependencia.Text, "Correcto");
                gvDependencias.DataSource = MediadorCN.GetAgendaMunicipal().ListarDependencia(IdArea);
                gvDependencias.DataBind();
                lblErrorRegistro.Text = "";
                txtDependencia.Text = "";
                txtDireccion.Text = "";
                txtOrdenDependencia.Text = "";
                lblErrorDependencia.Text = "El registro se completó satisfactoriamente.";
            }
            else
            {
                InsertarLog("Insertar dependencia " + txtDependencia.Text, "Fallido");
                lblErrorDependencia.Text = "El registro no se pudo completar.";
                lblErrorRegistro.Text = "";
                txtDependencia.Text = "";
                txtDireccion.Text = "";
                txtOrdenDependencia.Text = "";
            }           
        }

        protected void btnGuardar_Click(object sender, EventArgs e)
        {
            int idper = Convert.ToInt32(ddlResponsable.SelectedValue);
            if (idper > 0)
            {
                if (!EncontroResponsable(idper))
                {
                    ResponsableAgendaEN objResponsableAgendaEN = new ResponsableAgendaEN();
                    objResponsableAgendaEN.RESDEP_chANERES = txtAnexo.Text;
                    objResponsableAgendaEN.RESDEP_chDIRRES = txtDirecto.Text;
                    objResponsableAgendaEN.RESDEP_chRPCRES = txtRPC.Text;
                    objResponsableAgendaEN.PAD_P_chIDPER = idper;
                    objResponsableAgendaEN.DEPARE_P_inID = IdDependencia;
                    try
                    {
                        objResponsableAgendaEN.RESDEP_inORDRES = Convert.ToInt32(txtOrden.Text);
                    }
                    catch
                    {
                        objResponsableAgendaEN.RESDEP_inORDRES = 0;
                    }
                    int codigo = MediadorCN.GetResponsableAgenda().Insertar(objResponsableAgendaEN);
                    if (codigo > 0)
                    {
                        InsertarLog("Insertar responsable " + ddlResponsable.SelectedItem.Text, "Correcto");
                        List<ResponsableAgendaEN> lstResponsable = MediadorCN.GetResponsableAgenda().ListarDependencia(IdDependencia);
                        pPanelResponsables.Visible = true;
                        lblSeleccion.Text = "Responsables de la dependencia " + DependenciaSelect + ": ";
                        gvResponsables.DataSource = lstResponsable;
                        gvResponsables.DataBind();

                        lblErrorRegistro.Text = "El registro se completó satisfactoriamente.";
                        lblErrorDependencia.Text = "";
                        txtAnexo.Text = "";
                        txtDirecto.Text = "";
                        txtRPC.Text = "";
                        txtOrden.Text = "";
                        txtOrdenDependencia.Text = "";
                        ddlResponsable.SelectedIndex = 0;
                    }
                    else
                    {
                        InsertarLog("Insertar responsable " + ddlResponsable.SelectedItem.Text, "Fallido");
                        lblErrorDependencia.Text = "";
                        lblErrorRegistro.Text = "El registro no se pudo completar.";
                        lblErrorDependencia.Text = "";
                        txtAnexo.Text = "";
                        txtDirecto.Text = "";
                        txtRPC.Text = "";
                        txtOrden.Text = "";
                        txtOrdenDependencia.Text = "";
                        ddlResponsable.SelectedIndex = 0;
                    }
                }
                else
                    lblErrorRegistro.Text = "El usuario ingresado ya se encuentra en esta dependencia";
            }
            else
            {
                lblErrorRegistro.Text = "Seleccione el responsable de la dependencia";
            }
        }

        protected void ddlArea_SelectedIndexChanged(object sender, EventArgs e)
        {
            List<PersonaTramiteEN> lst = MediadorCN.GetPersonaTramite().Listar("", "", Convert.ToInt32(ddlArea.SelectedValue));
            PersonaTramiteEN obj = new PersonaTramiteEN();
            obj.IDPersona = 0;
            obj.NombrePersona = "Seleccione el responsable";
            lst.Insert(0, obj);
            ddlResponsable.DataSource = lst;
            
            ddlResponsable.DataTextField = "NombrePersona";
            ddlResponsable.DataValueField = "IDPersona";
            ddlResponsable.DataBind();
          //  IdArea = Convert.ToInt32(ddlArea.SelectedValue);
            gvDependencias.DataSource = MediadorCN.GetAgendaMunicipal().ListarDependencia(IdArea);
            gvDependencias.DataBind();
            pPanelResponsables.Visible = false; 
        }

        protected void btnSi_Click(object sender, EventArgs e)
        {
            AgendaMunicipalEN selected = MediadorCN.GetAgendaMunicipal().Obtener(IdDependencia);
            selected.DEPARE_inFLAELI = 0;
            int res = MediadorCN.GetAgendaMunicipal().Actualizar(selected);
            if(res>0)
                InsertarLog("Eliminar dependencia " + selected.DEPARE_chNOMDEP, "Correcto");
            else
                InsertarLog("Eliminar dependencia " + selected.DEPARE_chNOMDEP, "Fallido");
            gvDependencias.DataSource = MediadorCN.GetAgendaMunicipal().ListarDependencia(selected.OFIC_P_inCODOFI);
            gvDependencias.DataBind();
            lblErrorDependencia.Text = "";
            lblErrorRegistro.Text = "";
            pPanelConfirmacion.Visible = false;
        }

        protected void btnNo_Click(object sender, EventArgs e)
        {
            pPanelConfirmacion.Visible = false;
        }

        protected void btnEditar_Click(object sender, EventArgs e)
        {
            AgendaMunicipalEN selected = MediadorCN.GetAgendaMunicipal().Obtener(IdDependencia);
              selected.DEPARE_chDIRDEP = txtDireccion.Text;
              selected.DEPARE_chNOMDEP = txtDependencia.Text;
              try
              {
                  selected.DEPARE_inORDDEP = Convert.ToInt32(txtOrdenDependencia.Text);
              }
              catch
              {
                  selected.DEPARE_inORDDEP = 0;
              }
              selected.DEPARE_inFLAELI = 1;
              int res = MediadorCN.GetAgendaMunicipal().Actualizar(selected);
              btnEditar.Visible = false;
              btnAceptar.Visible = true;
              if (res == 1)
              {
                  InsertarLog("Actualizar dependencia " + selected.DEPARE_chNOMDEP, "Correcto");
                  lblErrorDependencia.Text = "Los datos fueron actualizados correctamente";
                  gvDependencias.DataSource = MediadorCN.GetAgendaMunicipal().ListarDependencia(IdArea);
                  gvDependencias.DataBind();
              }
              else
              {
                  InsertarLog("Actualizar dependencia " + selected.DEPARE_chNOMDEP, "Fallido");
                  lblErrorDependencia.Text = "Los datos no fueron actualizados";
              }
              txtDependencia.Text = "";
              txtDireccion.Text = "";
              txtOrdenDependencia.Text = "";
        }

        protected void gvResponsables_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            txtAnexo.Text = "";
            txtDirecto.Text = "";
            txtRPC.Text = "";
            txtOrden.Text = "";
            ddlResponsable.SelectedIndex = 0;
            lblErrorDependencia.Text = "";
            lblErrorRegistro.Text = "";
            int index = -1;
            index = Convert.ToInt32(e.CommandArgument);
            GridViewRow row = gvResponsables.Rows[index];
            IdResponsable = Convert.ToInt32(Server.HtmlDecode(row.Cells[0].Text));
            if (e.CommandName == "Editar")
            {
                try
                {
                    ResponsableAgendaEN selected = MediadorCN.GetResponsableAgenda().Obtener(IdResponsable);
                    txtAnexo.Text = selected.RESDEP_chANERES;
                    txtDirecto.Text = selected.RESDEP_chDIRRES;
                    txtRPC.Text = selected.RESDEP_chRPCRES;
                    txtOrden.Text = selected.RESDEP_inORDRES.ToString();
                    ddlResponsable.SelectedValue = selected.PAD_P_chIDPER.ToString();
                    btnActualizar.Visible = true;
                    btnGuardar.Visible = false;
                    pPanelResponsable.Visible = false;
                }
                catch
                {
                    lblErrorRegistro.Text = "No puede editar el responsable porque ya no se encuentra en está área. Eliminelo y registrelo en la dependencia de su nueva área.";
                }
            }
            else if (e.CommandName == "Eliminar")
            {
                lblResponsable.Text = Server.HtmlDecode(row.Cells[1].Text).ToString();
                pPanelResponsable.Visible = true;
                btnActualizar.Visible = false;
                btnGuardar.Visible = true;
            }
        }

        protected void btnSi2_Click(object sender, EventArgs e)
        {
            ResponsableAgendaEN selected = MediadorCN.GetResponsableAgenda().Obtener(IdResponsable);
            selected.RESDEP_inFLAELI = 0;
            int res = MediadorCN.GetResponsableAgenda().Actualizar(selected);
            if(res>0)
                InsertarLog("Eliminar responsable " + selected.NombrePer, "Correcto");
            else
                InsertarLog("Eliminar responsable " + selected.NombrePer, "Fallido");
            gvResponsables.DataSource = MediadorCN.GetResponsableAgenda().ListarDependencia(IdDependencia);
            gvResponsables.DataBind();
            lblErrorDependencia.Text = "";
            lblErrorRegistro.Text = "";
            ddlResponsable.SelectedIndex = 0;
            pPanelResponsable.Visible = false;
            btnActualizar.Visible = false;
            btnGuardar.Visible = true;
        }

        protected void btnNo2_Click(object sender, EventArgs e)
        {
            pPanelResponsable.Visible = false;
            btnActualizar.Visible = false;
            btnGuardar.Visible = true;
            ddlResponsable.SelectedIndex = 0;
        }

        protected void btnActualizar_Click(object sender, EventArgs e)
        {
            ResponsableAgendaEN objResponsableAgendaEN = MediadorCN.GetResponsableAgenda().Obtener(IdResponsable);
            objResponsableAgendaEN.RESDEP_chANERES = txtAnexo.Text;
            objResponsableAgendaEN.RESDEP_chDIRRES = txtDirecto.Text;
            objResponsableAgendaEN.RESDEP_chRPCRES = txtRPC.Text;
            try
            {
                objResponsableAgendaEN.RESDEP_inORDRES = Convert.ToInt32(txtOrden.Text);
            }
            catch
            {
                objResponsableAgendaEN.RESDEP_inORDRES = 0;
            }
            objResponsableAgendaEN.RESDEP_inFLAELI = 1;
            objResponsableAgendaEN.PAD_P_chIDPER = Convert.ToInt32(ddlResponsable.SelectedValue);
            objResponsableAgendaEN.DEPARE_P_inID = IdDependencia;
            int codigo = MediadorCN.GetResponsableAgenda().Actualizar(objResponsableAgendaEN);
            if (codigo > 0)
            {
                InsertarLog("Actualizar responsable " + objResponsableAgendaEN.NombrePer, "Correcto");
                lblErrorRegistro.Text = "Los datos fueron actualizados correctamente";
                lblErrorDependencia.Text = "";
                gvResponsables.DataSource = MediadorCN.GetResponsableAgenda().ListarDependencia(IdDependencia);
                gvResponsables.DataBind();

            }
            else
            {
                InsertarLog("Actualizar responsable " + objResponsableAgendaEN.NombrePer, "Fallido");
                lblErrorRegistro.Text = "Los datos no fueron actualizados";
                lblErrorDependencia.Text = "";
            }
            txtOrden.Text = "";
            txtAnexo.Text = "";
            txtDirecto.Text = "";
            txtRPC.Text = ""; ddlResponsable.SelectedIndex = 0;
            btnActualizar.Visible = false;
            btnGuardar.Visible = true;
        }

        protected void btnAutocomplete_Click(object sender, EventArgs e)
        {
            List<AreaEN> lstarea = MediadorCN.GetArea().Listar2(txtArea.Text);
           
            if (lstarea.Count > 0)
            {
                
                txtArea.Text = lstarea[0].Area;
                IdArea = lstarea[0].Codigo;
                InsertarLog("Seleccionar area " + txtArea.Text, "Correcto");
                List<PersonaTramiteEN> lst = MediadorCN.GetPersonaTramite().ListarCompleto(IdArea);
                PersonaTramiteEN obj = new PersonaTramiteEN();
                obj.IDPersona = 0;
                obj.NombrePersona = "Seleccione el responsable";
                lst.Insert(0, obj);
                ddlResponsable.DataSource = lst;
                pPanelRegistro.Visible = true;
                ddlResponsable.DataTextField = "NombrePersona";
                ddlResponsable.DataValueField = "IDPersona";
                ddlResponsable.DataBind();
                //IdArea = Convert.ToInt32(ddlArea.SelectedValue);
                gvDependencias.DataSource = MediadorCN.GetAgendaMunicipal().ListarDependencia(IdArea);
                gvDependencias.DataBind();
                pPanelResponsables.Visible = false; 
            }
        }
    }
}